package com.atguigu.gulimall.coupon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 *  1、如何使用Nacos作为配置中心统一管理配置
 *
 *      1）、引入依赖
 *          配置中心 配置统一管理，此处配置在了common中
 *          <dependency>
 *             <groupId>com.alibaba.cloud</groupId>
 *             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 *          </dependency>
 *      2）、创建一个bootstrap.properties。
 *          其中配置
 *          nacos中注册的服务名
 *          spring.application.name=gulimall-coupon
 *          nacos的地址
 *          spring.cloud.nacos.config.server-addr=127.0.0.1:8848
 *          只要是想要在nacos服务注册中心中注册，就需要配置这两个，并且在入口类中添加注解@EnableDiscoveryClient 中文为开启发现客户端
 *      3）、需要给配置中心默认添加一个叫数据集（DATA ID）gulimall-coupon。properties。默认规则，应用名.properties，他会优先扫描这个名字的配置，开启服务器时可以看到
 *      4）、给应用名。properties添加自己需要的配置
 *      5）、动态的获取配置。
 *          @RefreshScope：动态获取并刷新配置
 *          @Value("${配置项的键}")：获取配置（或者@ConfigurationProperties）
 *          如果配置中心和当前应用的配置文件中都配置了相同的项，有限使用配置中心配置
 *
 *  2、细节
 *      1）/命名空间、配置隔离：
 *          默认.public（保留空间）：默认新增的所有配置都在public空间
 *          1、开发，测试，生产：利用命名空间来做环境隔离
 *          注意：在bootstrap.properties配置上，需要使用哪个命名空间下的配置，
 *          spring.cloud.nacos.config.namespace=该空间的码
 *          2、每一个微服务之间相互隔离配置，每一个微服务都创建自己的命名空间，只加载自己命名空间下的所有配置
 *      2）、配置集：所有的配置的集合，application.properties中有许多配置，而application就是一个配置集，也就是一些配置的集合
 *
 *      3）、配置集id 类似文件名 application就是application配置集的id
 *          Data Id：类似文件名
 *
 *      4)、配置分组
 *          默认所有配置集都属于：DEFAULT_GROUP;
 *          如果不配置spring.cloud.nacos.config.group=某个组，他就会默认找DEFAULT_GROUP;如果没配置其他配置中心扫描顺序，会导致找不到值而报错
 *     每一个微服务创建自己的命名空间，使用配置分组区分环境，dev开发环境，test测试环境，prod生产环境
 *  3、同时加载多个配置集
 *      微服务为了方便管理配置，将不同配置放在不同配置集中，比如数据库相关方在datasource.yml，mybatis相关放在mybatis.yml，需要多个配置集同时执行
 *      1）、spring.cloud.nacos.config.extension-configs[] 或者spring.cloud.nacos.config.exe-configs[]执行一个数组,[]中填写下标，理论上可以写很多，
 *          spring.cloud.nacos.config.extension-configs[0].data-id=配置集id
 *          spring.cloud.nacos.config.extension-configs[0].group=哪一个分组
 *          spring.cloud.nacos.config.extension-configs[0].refresh=是否动态获取
 * */
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallCouponApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallCouponApplication.class, args);
    }

}
